El desarrollo de enfermedades laborales pueden ocasionar bajas laborales. Estás enfermedades se producen en el ámbito laboral según el trabajo realizado, pero queremos estudiar como el desarrollo de estas enfermedades se puede agravar por poseer una enfermedad mental, incluso si la gravedad de la enfermedad laboral es distinta entre géneros o debido a la profesión realizada.
Evaluación del desarrollo de enfermedades laborales, respecto a la profesión y el estado de salud mental.
Agregamos los URL del lugar de obtención de los datos: - Enfermedades laborales - Estado de salud mental - Tipos de trabajos - Grado de lesión de la enfermedad laboral
Agregamos el URL del repositorio: - Repositorio
Podemos descargar los datos de Canarias en formato .csv de la página web de datos del gobierno de España, desde R mediante este código:
#install.packages("readxl")
library(readxl)
# URL del archivo Excel en GitHub
url <- "https://github.com/Lucia-G-R/Seminario_Fuentes/blob/main/INPUT/DATA/Enfermedades_laborales_Espa%C3%B1a.csv.csv"
# Creamos un archivo temporal para almacenar el Excel
temp <- tempfile(fileext = ".csv")
# Descargamos el archivo desde GitHub
download.file("https://datos.gob.es/es/catalogo/a05003423-poblacion-de-16-y-mas-anos-segun-autovaloracion-del-estado-de-salud-en-relacion-a-situaciones-de-ansiedad-o-depresion-sexos-o-grupos-de-edad-por-anos-canarias-2004-2009", destfile = temp, mode = "wb")
Paquetes necesarios para JSON
# Paquetes necesarios para JSON
#install.packages("tidyjson")
Paquetes necesarios para xls
# Paquetes necesarios para xls
#install.packages("readxl")
Paquetes necesarios para csv
# Paquetes necesarios para csv
#install.packages("readr")
Paquetes necesarios para xlsx
# Paquetes necesarios para xlsx
#install.packages("readxl")
Paquete necesario para la manipulación de dataframes
# Paquete necesario para la manipulación de dataframes
#install.packages("dplyr")
Paquete necesario para transformar las filas y columnas
# Paquete necesario para transformar las filas y columnas
#install.packages("tidyverse")
Paquete para mostrar las tablas formatedas
#Paquete para mostrar tablas formatedas
#install.packages("DT")
Queremos extraer los datos sobre las enfermedades laborales que suceden en España. Como es un archivo con extensión .JSON con listas anidadas sin etiquetar, no podemos utilizar directamente un tibbe para ello, utilizaremos tidyjson.
library(rjson)
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(tidyjson)
##
## Adjuntando el paquete: 'tidyjson'
##
## The following object is masked from 'package:stats':
##
## filter
library(dplyr)
library(DT)
# Cargamos el archivo JSON, pero está en formato de lista.
espana_json <- fromJSON(file = "INPUT/DATA/Enfermedades_laborales_España.json")
# Observamos la estructura, nos damos cuenta que posee listas anidadas
#str(espana_json)
# Convertimos la lista de la varable MetaData en un dataframe
MetaData_df<-
espana_json%>%
enter_object("MetaData")%>% # Extreamos la infromación dentro de "MetaData"
gather_array() %>% # Convierte los elementos de un array en filas
spread_all()%>% # Esta función distribuye cualquier objeto JSON que sea escalar en nuevas columnas
select(T3_Variable, Nombre, Codigo) # Seleccionamos las tres variables que posee
# Convertimos la lista de la variable Data en un dataframe
Data_df<-
espana_json%>%
enter_object("Data")%>% # Extreamos la infromación dentro de "Data"
gather_array() %>%
spread_all()%>%
select(Valor) # Seleccionamos la variable que posee
# Unimos MetaData_df y Data_df usando "..JSON". Extraemos la columna "..JSON" como identificador
# Expandimos la columna "..JSON" con prefijo para evitar conflictos de nombres
MetaData_df <-
MetaData_df %>%
unnest_wider(..JSON, names_sep = "_json")
Data_df <-
Data_df %>%
unnest_wider(..JSON, names_sep = "_json")
# Creamos un identificador único para cada fila
MetaData_df <-
MetaData_df %>%
mutate(id = row_number())
Data_df <-
Data_df %>%
mutate(id = row_number())
# Hacemos la unión de los df por la columna id que hemos creado con la variable lista "..JSON"
espana_df <-
MetaData_df %>%
left_join(Data_df, by = "id") %>% # Unimos con Data_df usando 'id'
mutate(Nombre = espana_json$Nombre) # Agregamos la columna "Nombre" del espana_json
#attributes(MetaData_df)
#attributes(Data_df)
#print(MetaData_df)
#print(Data_df)
#print(espana_json)
#print(espana_df)
datatable(espana_df)
Queremos extraer los datos sobre los accidentes laborales que suceden en Canarias. Como es un archivo con extensión .xls, utilizamos read_excel.
# Cargamos los archivos con extensión .xls
library(readxl)
library(DT)
canarias_df <- read_excel("INPUT/DATA/Accidentes_laborales_Canarias.xls")
#class(canarias_df)
#print(canarias_df)
datatable(canarias_df)
Queremos extraer los datos sobre la salud mental en los habitantes de Canarias. Como es un archivo con extensión .csv, utilizamos read_delim e indicamos que el delimitador es ; Al imprimirlo como tabla con la función datatable nos da un error con el formato, es decir, indica que hay un problema con la codificación del archivo CSV. En este caso, el error nos indica que los archivos están codificados en UTF-8, pero revisando la tabla incluye caracteres como acentos. Por eso, utilizamos locale que es una forma de configurar la codificación de caracteres que define cómo se representan los caracteres de texto en bytes. En conclusión con encoding = “ISO-8859-1” queremos que R interprete el archivo usando la codificación Latin-1, esta configuración asegura que los caracteres especiales se lean e interpreten de forma adecuada, evitando caracteres raros.
# Cargamos los archivos con extensión .csv
library(readr)
library(DT)
Salud_df <- read_delim ("INPUT/DATA/Estados_de_salud_Canarias.csv.csv", delim = ";", locale = locale(encoding = "ISO-8859-1"))
## Rows: 100 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr (3): sexos_grupos_edad, indicadores, autovaloracion_estado_salud_relacio...
## dbl (2): anios, poblacion_16_mas_anios
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#class(Salud_df)
datatable(Salud_df)
Queremos extraer los datos sobre la gravedad de las enfermedades laborales producidas en Aragón. Como es un archivo con extensión .xlsx, utilizamos read_excel.
# Cargamos los archivos con extensión .xlsx
library(readxl)
library(DT)
Aragon_df <- read_excel ("INPUT/DATA/070901-02_Por grado y sexo. Aragon.xlsx")
## New names:
## • `Grupo Grado Código` -> `Grupo Grado Código...4`
## • `Grupo Grado Código` -> `Grupo Grado Código...5`
#class(Aragon_df)
print(Aragon_df)
## # A tibble: 121 × 6
## Año Sexo `Nº Accidentes` `Grupo Grado Código...4` Grupo Grado Código..…¹
## <dbl> <chr> <dbl> <chr> <dbl>
## 1 2023 Hombres 12082 Leves 1
## 2 2023 Mujeres 4784 Leves 1
## 3 2022 Hombres 11954 Leves 1
## 4 2022 Mujeres 5073 Leves 1
## 5 2021 Hombres 11559 Leves 1
## 6 2021 Mujeres 4739 Leves 1
## 7 2020 Hombres 10651 Leves 1
## 8 2020 Mujeres 4727 Leves 1
## 9 2019 Hombres 11909 Leves 1
## 10 2019 Mujeres 4511 Leves 1
## # ℹ 111 more rows
## # ℹ abbreviated name: ¹`Grupo Grado Código...5`
## # ℹ 1 more variable: CCAA <chr>
datatable(Aragon_df)
Vamos a cambiar los nombres de las distintas columnas de los datos extraídos. Cambiamos los nombres de las columnas del conjunto de datos sobre los accidentes laborales que suceden en Canarias.
library(tidyverse)
library(DT)
#attributes(canarias_df)
canarias <- rename(.data = canarias_df, Año = `TIME_PERIOD#es`, Año2 = `TIME_PERIOD_CODE`, Sexo = `SEXO#es`, SexoCod = `SEXO_CODE`, Gravedad = `ACCIDENTE_GRAVEDAD#es`, GravedadCod = `ACCIDENTE_GRAVEDAD_CODE`, TipoTrab = `TIPO_TRABAJO#es`, TipoTrabCod = `TIPO_TRABAJO_CODE`, TrabHabitual = `TRABAJO_HABITUAL#es`, TrabHabCod = `TRABAJO_HABITUAL_CODE`, Obs = `OBS_VALUE`, ConfeciObs = `CONFIDENCIALIDAD_OBSERVACION#es`, Notasobs = `NOTAS_OBSERVACION#es`, Estadosobs = `ESTADO_OBSERVACION#es`)
#print(canarias)
datatable(canarias)
Cambiamos los nombres de las columnas del conjunto de datos sobre la gravedad de las enfermedades laborales producidas en Aragón.
library(tidyverse)
library(DT)
#attributes(Aragon_df)
Aragon <- rename(.data = Aragon_df, NumAcci = `Nº Accidentes`, Gravedad = `Grupo Grado Código...4`, GravedadCod = `Grupo Grado Código...5`)
#print(Aragon)
datatable(Aragon)
Cambiamos los nombres de las columnas del conjunto de datos sobre las enfermedades laborales que suceden en España.
library(tidyverse)
library(DT)
#attributes(espana_df)
Espana <- rename(.data = espana_df, TipoEnf = `T3_Variable`, Indicador = `Codigo`, Variable = `..JSON_jsonT3_Variable`, Nombre = `..JSON_jsonNombre`, Codigo = `..JSON_jsonCodigo`, jsonValor = `..JSON_jsonValor`)
#print(Espana)
datatable(Espana)
Cambiamos los nombres de las columnas del conjunto de datos sobre la salud mental en los habitantes de Canarias.
library(tidyverse)
library(DT)
#attributes(Salud_df)
Salud <- rename(.data = Salud_df, Sexo = `sexos_grupos_edad`, EstadoAnsiedad = `autovaloracion_estado_salud_relacion_situaciones_ansiedad`, Años = `anios`, Obs = `poblacion_16_mas_anios`)
#print(Salud)
datatable(Salud)
Eliminamos los valores nulos del conjunto de datos sobre los accidentes laborales que suceden en Canarias. Con select observamos las columnas que poseen valores nulos..
library(dplyr)
canarias %>%
select(where(~ all(is.na(.))))
## # A tibble: 6,480 × 3
## ConfeciObs Notasobs Estadosobs
## <lgl> <lgl> <lgl>
## 1 NA NA NA
## 2 NA NA NA
## 3 NA NA NA
## 4 NA NA NA
## 5 NA NA NA
## 6 NA NA NA
## 7 NA NA NA
## 8 NA NA NA
## 9 NA NA NA
## 10 NA NA NA
## # ℹ 6,470 more rows
Para poder eliminar las columnas que poseen datos con argumentos nulos utilizamos la función filter que nos devolverá solo las columnas con valores de interés.
canarias <- Filter(function(x) !all(is.na(x)), canarias)
datatable(canarias)
Eliminamos las columnas que no nos va a interesar estudiar para ello, seleccionamos las columnas que nos interesan. En el único conjunto de datos que no vamos a eliminar columnas es en los datos sobre la salud mental en los habitantes de Canarias. Primero vamos a eliminar las columnas del conjunto de datos de canarias. Nos vamos a quedar solo con las columnas Año, Sexo, Gravedad, TipoTrab y Obs.
library(dplyr)
canarias <-
canarias%>%
select(Año, Sexo, Gravedad, TipoTrab, Obs)
datatable(canarias)
En segundo lugar, eiminamos las columnas del conjunto de datos de Aragon. Nos vamos a quedar solo con las columnas Año, Sexo, NumAcci y Gravedad.
library(dplyr)
Aragon <-
Aragon%>%
select(Año, Sexo, NumAcci, Gravedad)
datatable(Aragon)
En tercer lugar, eiminamos las columnas del conjunto de datos de Espana. Nos vamos a quedar solo con las columnas TipoEnf, Nombre, id y Valor.
library(dplyr)
Espana <-
Espana%>%
select(TipoEnf, Nombre, id, Valor)
datatable(Espana)
Eliminamos las filas que no nos va a interesar estudiar.
#ELIMINAR FILAS
Salud <- subset(Salud, !Sexo %in% c("De 16 a 64 a\xf1os", "De 65 y m\xe1s a\xf1os"))
#canarias <- subset(canarias, !TipoTrabCod %in% c("4|9|_T|3|6|0|5|1"))
Espana <- subset (Espana, !TipoEnf %in% c ("Cardiopartía|Dolor de cabeza|infecciosa|No sabe|problema de salud|Problemaauditivo|dermatológico|gástrico|respiratorio|Total"))
Realizamos un dataframe uniendo los datos sobre la gravedad de las enfermedades laborales en Aragón y la salud mental de los ciudadanos en Canarias.
library(DT)
# Unimos por una columna común "Sexo"
df_Salu_Arag <- merge(Aragon, Salud, by = "Sexo")
datatable(df_Salu_Arag)
Realizamos un dataframe uniendo los datos sobre los accidentes laborales que suceden en Canarias y los datos sobre las enfermedades laborales que suceden en España. Como tenemos dos nombres de columnas diferentes aunque recoge el mismo tipo de valores vamos a utilizar un inner_join buscando coincidencias exactas entre el atributo Obs del conjunto de datos Espana y el atributo Valor del conjunto de datos canarias. Como existen valores iguales en ambos atributos eliminamos duplicados.
library(DT)
canarias_dis <-
canarias %>%
distinct(Obs, .keep_all = TRUE)
Espana_dis <-
Espana %>%
distinct(Valor, .keep_all = TRUE)
df_cana_Esp <-
canarias_dis %>%
inner_join(Espana_dis, by = c("Obs" = "Valor"))
datatable(df_cana_Esp)
##Función Cantidad de hombres y mujeres del dataframe
hombres <- sum(df_cana_Esp$Sexo == "Hombres")
mujeres <- sum(df_cana_Esp$Sexo == "Mujeres")
print(hombres)
## [1] 3
print (mujeres)
## [1] 0
Sumatorio de casos en los que muestra la cantidad de personas (según el sexo) que tienen el tipo de enfermedad
cat("¿Quieres saber cuantos hombres (1), mujeres (2) o total (3) tienen problemas óseos?")
condicion <- as.integer(readline(prompt = "Ingresa el número de la condición (1, 2 o 3): "))
numero <- 0
if (condicion == 1){
for (i in 1:nrow(df_cana_Esp)) {
if (df_cana_Esp$Sexo[i] == "Hombres" && df_cana_Esp$Nombre[i] == "Problema óseo, articular o muscular que afecta principalmente a las caderas, las piernas o los pies")
{numero <- numero + 1}
}
} else if (condicion == 2){
for (i in 1:nrow(df_cana_Esp)) {
if (df_cana_Esp$Sexo[i] == "Mujeres" && df_cana_Esp$Nombre[i] == "Problema óseo, articular o muscular que afecta principalmente a las caderas, las piernas o los pies")
{numero <- numero + 1}
}
} else if (condicion == 3) {
for (i in 1:nrow(df_cana_Esp)) {
if (df_cana_Esp$Sexo[i] == "Total" && df_cana_Esp$Nombre[i] == "Problema óseo, articular o muscular que afecta principalmente al cuello, los hombros, los brazos o l")
{numero <- numero + 1}
} else ("Ingresa una de estas opciones: 1, 2 o 3\n")
}
cat("El número de casos es:", numero, "\n")
## Error: <text>:22:5: inesperado 'else'
## 21: {numero <- numero + 1}
## 22: } else
## ^
Imágenes que muestran los daños que ocurren en los distintos casos:
Función que determina la cantidad de personas que tienen una enfermedad segun el sexo y la enfermedad
Cantidad1 <- df_cana_Esp$Obs[df_cana_Esp$Sexo == "Hombres" & df_cana_Esp$Nombre == "Problema óseo, articular o muscular que afecta principalmente a las caderas, las piernas o los pies"]
print(Cantidad1)
## [1] 26
Cantidad2 <- df_cana_Esp$Obs[df_cana_Esp$Sexo == "Total" & df_cana_Esp$Nombre == "Problema óseo, articular o muscular que afecta principalmente al cuello, los hombros, los brazos o l"]
print (sum(Cantidad2))
## [1] 136
Vamos a transponer la estructura de nuestra tabla ordenada Espana desde largo a ancho.
Long_Espana <- pivot_wider(data = Espana, names_from = "Nombre", values_from = "Valor")
datatable(Long_Espana)
Elimino los valores nulos que están presentes tras pivotar el conjunto de datos de España
library(dplyr)
library(DT)
Espana_piv <-
Long_Espana %>%
select(where(~ all(is.na(.))))
datatable(Espana_piv)
Añadimos un gráfico de barras para observar el número de accidentes laborales sucedidos durante los difrentes años en Aragón. Para ello, utilizaremos el atributo de Año y NumAcci del conjunto de datos sobre los accidentes laborales en Aragón.
library(tidyverse)
ggplot(data = Aragon, aes(x = Año, y = NumAcci)) +
geom_bar(stat = "identity", fill = "darkturquoise") +
xlab("Año del suceso") +
ylab("Número de accidentes laborales") +
ggtitle(label = "Número de accidentes según el año del suceso")
## Error in render(x, visible = TRUE, envir = parent.frame()): los argumentos no fueron usados (visible = TRUE, envir = parent.frame())
añadir los dos url de los articulos https://www.omniamachinery.com/es/2022/05/mental-health-in-construction/
https://osha.europa.eu/es/themes/work-related-diseases https://stackoverflow.com/search?q=input+string+1+is+invalid+UTF-8
url articulos https://www.who.int/es/news-room/fact-sheets/detail/mental-disorders https://www.redalyc.org/journal/170/17049838011/html/#:~:text=Fundamentos%3A%20Seg%C3%BAn%20las%20estad%C3%ADsticas%20oficiales,participaci%C3%B3n%20en%20el%20mundo%20laboral.
Note that the echo = FALSE parameter was added to the
code chunk to prevent printing of the R code that generated the
plot.